package com.hlpedu.pojo;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Data
@Component//不起别名，默认使用类名的首字母小写作为标识
//@Component("people")为对象起别名
//读取properties文件中的数据
//@PropertySource("classpath:values.properties")
//若出现中文乱码，先判断File Encoding中properties文件的默认编码是否已经修改为UTF-8
//若已修改仍出现中文乱码，需要如下配置文件读取的字符编码格式
@PropertySource(value = "classpath:values.properties",encoding = "UTF-8")
public class People {
    /*@Value注解有两种主要的使用方式
     @Value可以用来将外部的值注入到bean的属性中，可以使用${}和#{}动态注入属性值
     1.@Value("${}")：可以获取对应属性文件中定义的属性值
     2.@Value("#{}")：表示使用SpEl表达式通常用来获取bean的属性，或者调用bean的某个方法
     @Value("#{}")此形式只能为如下类型赋值
     2.1 基本数值
     2.2 可以写SpEl表达式
     2.3 读取配置文件的值时写法为:@Value("#{'${c.cage}'}")
     **/
    //@Value("彷徨中微笑")
    @Value("${p.name}")
    private String name;
    @Autowired
    /*@Autowired用于对bean的属性变量，属性的setter方法即构造器方法进行标注，
    配合对应的注解处理器完成bean的自动装配工作，默认按照bean的类型（byType)进行装配*/
    private Cat cat;
    @Resource
    private Dog dog;
    @Autowired
    @Qualifier("fish2")
    /*@Autowired默认按照bean的类型（byType)进行装配，在装配过程中若出现过个类型相匹配的bean。
    * 需要使用@Qualifier注解和@Autowired配合使用，最终按照byName进行自动装配。
    * 切记@Qualifier注解不能单独使用*/
    private Fish fish;
    public void sayHello() {

        System.out.println("...");
    }
}
